/*
 * 代号：凤凰
 * http://www.jphenix.org
 * 2014-06-04
 * V4.0
 */
package com.jphenix.kernel.objectloader.instanceb;
//#region 【引用区】
import com.jphenix.kernel.objectloader.interfaceclass.IBean;
import com.jphenix.kernel.objectloader.interfaceclass.IBeanFactory;
import com.jphenix.standard.docs.ClassInfo;
//#endregion

//#region 【说明区】
/**
 * 根类
 * 
 * 2022-02-06 将ABase中涉及到类加载的几个方法转移到当前类中
 * 
 * @author 刘虻
 * 2010-2-1 下午04:06:51
 */
//#endregion
@ClassInfo({"2024-06-05 10:26","根类"})
public class BaseBean implements IBean {

	//#region 【声明区】
	//类加载器
	protected IBeanFactory _beanFactory = null;

	protected String _beanID = null;				//类主键
	//#endregion
	
	//#region getBeanFactory()
	/**
	 * 覆盖方法
	 * 刘虻
	 * 2010-2-1 下午04:06:51
	 */
	@Override
	public IBeanFactory getBeanFactory() {
		return _beanFactory;
	}
	//#endregion

	//#region setBeanFactory(beanFactory)
	/**
	 * 覆盖方法
	 * 刘虻
	 * 2010-2-1 下午04:06:51
	 */
	@Override
	public void setBeanFactory(IBeanFactory beanFactory) {
		this._beanFactory = beanFactory;
	}
	//#endregion

	//#region getBeanID()
	/**
	 * 覆盖方法
	 * 刘虻
	 * 2010-5-5 下午04:25:35
	 */
	@Override
	public String getBeanID() {
		if(_beanID==null) {
			_beanID = "";
		}
		return _beanID;
	}
	//#endregion

	//#region webInfPath() 返回 WEB-INF 文件夹的绝对路径
	/**
	 * 返回 WEB-INF 文件夹的绝对路径
	 * @return WEB-INF 文件夹的绝对路径
	 * 2017年12月1日
	 * @author MBG
	 */
	@Override
	public String webInfPath() {
		return _beanFactory.getWebInfPath();
	}
	//#endregion
	
	//#region sourcePath() 返回（上传、下载、备份）根文件夹的绝对路径
	/**
	 * 返回（上传、下载、备份）根文件夹的绝对路径
	 * @return 绝对路径
	 * 2019年7月16日
	 * @author MBG
	 */
	public String sourcePath() {
		return _beanFactory.getFileSourcePath();
	}
	//#endregion
	
	//#region 【已废弃】hasExtLib() 返回是否存在扩展包文件路径
	/*
	 * 返回是否存在扩展包文件路径
	 * 
	 * 取消扩展库功能，改用：在WEB-INF/lib中创建子文件夹将jar包归类
	 * 
	 * 有时候，为了要支持某一个功能，要加载大量jar包，比如poi
	 * 如果都放到lib文件夹中，就显得这个文件夹中文件太多太杂，不好管理
	 * 于是就支持了可以将支持某一个功能的包，放入lib的子文件夹中
	 * 
	 * @param extLibPath 相对于 /WEB-INF/lib 的文件路径
	 *                    比如 /WEB-INF/lib/poi  则传入 poi
	 *                    比如 /WEB-INF/lib/ms/ws 则传入 ms/ws
	 * @return           true存在
	 * 2018年3月30日
	 * @author MBG
	 */
	/*
	public boolean hasExtLib(String extLibPath) {
		return _beanFactory.hasExtLib(extLibPath);
	}
	*/
	//#endregion

	//#region bean(interfaceCls) 通过接口获取指定类实例（不抛异常）
	/**
	 * 通过接口获取指定类实例（不抛异常）
	 * @param interfaceCls 接口类
	 * @return 类实例
	 * 2017年1月23日
	 * @author MBG
	 */
	public <T> T bean(Class<T> interfaceCls) {
		try {
			if(!getBeanFactory().beanExists(interfaceCls)) {
				return null;
			}
			return getBeanFactory().getObject(interfaceCls,this);
		}catch(Exception e) {}
		return null;
	}
	//#endregion

	//#region bean(beanID) 通过类主键获取指定类实例（不抛异常）
	/**
	 * 通过类主键获取指定类实例（不抛异常）
	 * @param beanID 类主键
	 * @return 类实例
	 * 2017年1月23日
	 * @author MBG
	 */
	public <T> T bean(String beanID) {
		try {
			if(!getBeanFactory().beanExists(beanID)) {
				return null;
			}
			return getBeanFactory().getObject(beanID,this);
		}catch(Exception e) {}
		return null;
	}
	//#endregion

	//#region beanExist(interfaceCls) 指定类是否存在
	/**
	 * 指定类是否存在
	 * @param interfaceCls 指定类的接口
	 * @return 是否存在
	 * 2017年3月29日
	 * @author MBG
	 */
	public boolean beanExist(Class<?> interfaceCls) {
		if(interfaceCls==null) {
			return false;
		}
		return getBeanFactory().beanExists(interfaceCls);
	}
	//#endregion

	//#region beanExist(beanID) 指定类是否存在
	/**
	 * 指定类是否存在
	 * @param beanID 指定类的主键
	 * @return 是否存在
	 * 2017年3月29日
	 * @author MBG
	 */
	public boolean beanExist(String beanID) {
		if(beanID==null || beanID.length()<1) {
			return false;
		}
		return getBeanFactory().beanExists(beanID);
	}
	//#endregion
	
	//#region getBean(interfaceCls) 通过类接口获取指定类实例
	/**
	 * 通过类接口获取指定类实例
	 * 刘虻
	 * 2010-7-27 下午02:15:36
	 * @param interfaceCls 接口类
	 * @return 指定类实例
	 * @throws Exception 执行发生异常
	 */
	public <T> T getBean(Class<T> interfaceCls) throws Exception {
		return getBeanFactory().getObject(interfaceCls,this);
	}
	//#endregion
	
	//#region getBean(beanID) 通过类主键获取指定类实例
	/**
	 * 通过类主键获取指定类实例
	 * @param beanID 类主键
	 * @return 指定类实例
	 * @throws Exception 异常
	 * 2016年6月8日
	 * @author MBG
	 */
	public <T> T getBean(String beanID) throws Exception {
		return getBeanFactory().getObject(beanID,this);
	}
	//#endregion
}









